/*
 *  EventLib
 *  qEventRegistry.cpp
 *
 *	Copyright (c) 2011, AVS
 *	All rights reserved.
 *
 *	Redistribution and use in source and binary forms, with or without
 *	modification, are permitted provided that the following conditions are met:
 *	1.	Redistributions of source code must retain the above copyright
 *		notice, this list of conditions and the following disclaimer.
 *	2.	Redistributions in binary form must reproduce the above copyright
 *		notice, this list of conditions and the following disclaimer in the
 *		documentation and/or other materials provided with the distribution.
 *	3.	All advertising materials mentioning features or use of this software
 *		must display the following acknowledgement:
 *		This product includes software developed by the AVS.
 *	4.	Neither the name of the AVS nor the
 *		names of its contributors may be used to endorse or promote products
 *		derived from this software without specific prior written permission.
 *
 *	THIS SOFTWARE IS PROVIDED BY AVS ''AS IS'' AND ANY
 *	EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 *	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 *	DISCLAIMED. IN NO EVENT SHALL AVS BE LIABLE FOR ANY
 *	DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 *	(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 *	LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 *	ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *	(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "qEventRegistry.h"

qEventRegistry::qEventRegistry()
{
	extern EventState *gp_EventState;
	gp_EventState = (EventState*)malloc(sizeof(EventState));
}

qEventRegistry::~qEventRegistry()
{}

void qEventRegistry::push_event(qEvent evt)
{
	this->events.push_back(evt);
}

void qEventRegistry::process_events()
{
	std::vector<qEvent>::iterator e_itr = this->events.begin();
	
	std::list<qEventListener*>::iterator l_itr;
	
	extern EventState *gp_EventState;
	
	for(e_itr;e_itr != this->events.end();e_itr++)
	{
		l_itr = this->listeners.begin();
		
		for(l_itr; l_itr != this->listeners.end();l_itr++)
		{
			//(*l_itr)->ON_EVENT(*e_itr);
			if((*l_itr)->GET_TYPE() == e_itr->getType() ||
			   (*l_itr)->GET_TYPE() == DEFAULT_LISTENER ||
			   e_itr->getType() == DEFAULT_EVENT)
				(*l_itr)->ON_EVENT(&(*e_itr));
			
			//delete *e_itr;
		}
	}
	
	this->events.clear();
}